package Test.Moteur;

import Risk.Moteur.Continent;
import Risk.Moteur.Jeu;
import Risk.Moteur.Joueur;
import Risk.Moteur.Pays;
import Risk.Moteur.Plateau;

import java.awt.Color;

import java.io.File;

import java.util.ArrayList;

/**
 *
 * @author     Alexandre LIGUORI
 */
public class TestPays {
    public static void main(String[] args) {

	// test deplacement
	testDeplacement();
	System.out.println("\n##################################################\n");

	// test bataille
	testBataille();
    }

    public static void testBataille() {
	Joueur			rouge          = null;
	Joueur			bleue          = null;
	Pays			EuropeN        = null;
	Pays			EuropeS        = null;
	int			resultat       = 0,
				compteur       = 1,
				nbArmeeDef     = 0;
	ArrayList<Integer>	jetDeAttaquant = new ArrayList<Integer>();
	ArrayList<Integer>	jetDeDefenseur = new ArrayList<Integer>();
	Plateau			p              = new Plateau(new Jeu());

	p.initialisationContinents("donnee" + File.separator + "renfort_continents.prn");
	p.intialiseFrontiere("donnee" + File.separator + "voisins.prn");

	// test bataille
	rouge   = new Joueur("rouge", Color.red);
	bleue   = new Joueur("bleue", Color.blue);
	EuropeN = p.getPays("EuropeN");
	EuropeN.setNbArmee(50);
	EuropeN.setJoueur(rouge);
	EuropeS = p.getPays("EuropeS");
	EuropeS.setNbArmee(5);
	EuropeS.setJoueur(bleue);
	System.out.println("EuropeN voisins de EuropeS ? " + EuropeN.testFrontiere(EuropeS));

	// manuel
	jetDeAttaquant.add(6);
	jetDeAttaquant.add(6);
	jetDeAttaquant.add(6);
	System.out.println("jets attaque = " + jetDeAttaquant);
	jetDeDefenseur.add(6);
	jetDeDefenseur.add(5);
	System.out.println("jets defense = " + jetDeDefenseur);
	resultat = EuropeN.attaque(EuropeS, jetDeAttaquant, jetDeDefenseur);
	System.out.println("Armees restante en EuropeN = " + EuropeN.getNbArmee() + " appartient a "
			   + EuropeN.getJoueur().getNom());
	System.out.println("Armees restante en EuropeS = " + EuropeS.getNbArmee() + " appartient a "
			   + EuropeS.getJoueur().getNom());
	System.out.println("-----------------------------------------------");

	// aleatoire
	do {
	    if (compteur > 20) {
		break;
	    }

	    System.out.println("Bataille n°" + (compteur++));
	    jetDeAttaquant = Pays.jetAttaquant(3, EuropeN);
	    System.out.println("jets attaque = " + jetDeAttaquant);

	    if (EuropeS.getNbArmee() >= 2) {
		nbArmeeDef = 2;
	    } else {
		nbArmeeDef = EuropeS.getNbArmee();
	    }

	    jetDeDefenseur = Pays.jetDefenseur(nbArmeeDef, EuropeS);
	    System.out.println("jets defense = " + jetDeDefenseur);
	    resultat = EuropeN.attaque(EuropeS, jetDeAttaquant, jetDeDefenseur);
	    System.out.println("Armees restante en EuropeN = " + EuropeN.getNbArmee() + " appartient a "
			       + EuropeN.getJoueur().getNom());
	    System.out.println("Armees restante en EuropeS = " + EuropeS.getNbArmee() + " appartient a "
			       + EuropeS.getJoueur().getNom());
	    System.out.println("-----------------------------------------------");
	} while (resultat != Pays.VAINQUEUR);

	EuropeN.deplaceArmeeVers(EuropeS, EuropeN.getNbArmee() - 1);
	System.out.println("ROUGE gagne et deplace le max de soldats sur pays conquit");
	System.out.println("Armees restante en EuropeN = " + EuropeN.getNbArmee() + " appartient a "
			   + EuropeN.getJoueur().getNom());
	System.out.println("Armees restante en EuropeS = " + EuropeS.getNbArmee() + " appartient a "
			   + EuropeS.getJoueur().getNom());

	// test erreur
	System.out.println("\n Tests des erreurs\n---------------");
	jetDeAttaquant = Pays.jetAttaquant(4, EuropeN);
	EuropeN.attaque(EuropeS, jetDeAttaquant, jetDeDefenseur);
	jetDeAttaquant = Pays.jetAttaquant(3, EuropeN);
	jetDeDefenseur = Pays.jetDefenseur(3, EuropeS);
	EuropeN.attaque(EuropeS, jetDeAttaquant, jetDeDefenseur);
    }

    public static void testDeplacement() {
	Joueur	rouge   = null;
	Joueur	bleue   = null;
	Pays	EuropeN = null;
	Pays	EuropeS = null;
	Pays	Japon   = null;
	Plateau	p       = new Plateau(new Jeu());

	p.initialisationContinents("donnee" + File.separator + "renfort_continents.prn");
	p.intialiseFrontiere("donnee" + File.separator + "voisins.prn");
	rouge = new Joueur("rouge", Color.red);
	bleue = new Joueur("bleue", Color.blue);

	for (Continent conti : p.getContinents()) {
	    for (Pays pa : conti.getPaysContinent()) {
		pa.setJoueur(rouge);
		pa.setNbArmee(10);

		if (pa.getNom().equals("EuropeN")) {
		    EuropeN = pa;
		} else if (pa.getNom().equals("EuropeS")) {
		    pa.setJoueur(bleue);
		    EuropeS = pa;
		} else if (pa.getNom().equals("Japon")) {
		    Japon = pa;
		}
	    }
	}

	System.out.println("europeN vers EuropeS ?=" + EuropeN.testDeplacement(EuropeS));
	System.out.println("europeN vers Japon ?=" + EuropeN.testDeplacement(Japon));
	System.out.println("-----");
	System.out.println("nbArmee EuropeN=" + EuropeN.getNbArmee() + " nbArmee Japon=" + Japon.getNbArmee());
	EuropeN.deplaceArmeeVers(Japon, 8);
	System.out.println("nbArmee EuropeN=" + EuropeN.getNbArmee() + " nbArmee Japon=" + Japon.getNbArmee());
	EuropeN.deplaceArmeeVers(Japon, 3);
	System.out.println("TEST ERREUR : nbArmee EuropeN=" + EuropeN.getNbArmee() + " nbArmee Japon="
			   + Japon.getNbArmee());
	EuropeN.deplaceArmeeVers(Japon, 2);
	System.out.println("TEST ERREUR : nbArmee EuropeN=" + EuropeN.getNbArmee() + " nbArmee Japon="
			   + Japon.getNbArmee());
	EuropeN.deplaceArmeeVers(Japon, 1);
	System.out.println("nbArmee EuropeN=" + EuropeN.getNbArmee() + " nbArmee Japon=" + Japon.getNbArmee());
    }
}
